import os
import sys
import logging
import colorlog

# # 定义日志格式字符串常量
# LOG_FORMAT = '%(asctime)s - %(filename)s - %(levelname)s: %(message)s'
# # <green>{time:YYYY-MM-DD HH:mm:ss,SSS}</green> <red>[{thread}]</red> <blue>{level}</blue> <cyan>名称:{name}</cyan> <green>方法:{function}</green> {line}   <red>{message}</red>
# DATE_FORMAT = '%d %b %Y %H:%M:%S'
# # LOG_FORMAT = '<green>{time:YYYY-MM-DD HH:mm:ss,SSS}</green> <red>[{thread}]</red> <blue>{level}</blue> <cyan>名称:{name}</cyan> <green>方法:{function}</green> {line}   <red>{message}</red>'
#
# # 定义颜色配置常量，用于动态配置日志颜色
# COLOR_LOG_COLORS = {
#     'DEBUG': 'cyan',
#     'INFO': 'green',
#     'WARNING': 'yellow',
#     'ERROR': 'red',
#     'CRITICAL': 'red',
# }
#
# # 日志文件路径配置
# LOG_DIR = '../../log'  # 替换为实际日志文件夹路径
# LOG_FILE_NAME = 'application.log'
# LOG_FILE_PATH = os.path.join(LOG_DIR, LOG_FILE_NAME)
#
#
# def get_log():
#     # 移除所有已存在的处理器
#     root_logger = logging.getLogger()
#     for handler in root_logger.handlers[:]:
#         root_logger.removeHandler(handler)
#
#     # 检查标准错误输出是否为终端
#     if not sys.stderr.isatty():
#         # 如果不是终端，使用普通日志格式
#         log_color_formatter = logging.Formatter(LOG_FORMAT)
#     else:
#         # 如果是终端，使用带颜色的日志格式
#         ColorFormatter = colorlog.ColoredFormatter
#         log_color_formatter = ColorFormatter(
#             LOG_FORMAT,
#             datefmt=DATE_FORMAT,
#             log_colors=COLOR_LOG_COLORS)
#
#     # 配置根日志记录器
#     root_logger.setLevel(logging.DEBUG)  # 设置日志级别为DEBUG
#
#     # 创建一个处理程序并将格式化器添加到处理程序中
#     file_handler = logging.FileHandler(LOG_FILE_PATH)  # 输出到指定文件
#     file_handler.setFormatter(log_color_formatter)
#     root_logger.addHandler(file_handler)
#
#     # 如果需要同时输出到控制台（可选）
#     console_handler = logging.StreamHandler(sys.stdout)
#     console_handler.setFormatter(log_color_formatter)
#     root_logger.addHandler(console_handler)
#     return root_logger

# 调用日志配置函数
# log().info('你好')
# # 日志文件路径配置
LOG_DIR = '../../log'  # 替换为实际日志文件夹路径
LOG_FILE_NAME = 'application.log'
LOG_FILE_PATH = os.path.join(LOG_DIR, LOG_FILE_NAME)
def get_log():
    # 创建日志器
    logger = logging.getLogger()
    # 设置级别
    logger.setLevel(logging.INFO)
    # 防止重写日志，这里进行判断，如果logger.handles列表为空则添加
    if not logger.handlers:
        # 创建处理器，控制台处理器
        sh = logging.StreamHandler()
        # 把日志信息添加到控制台
        logger.addHandler(sh)

        # 创建文本处理器
        fh = logging.FileHandler(LOG_FILE_PATH, encoding='utf-8')
        # 日志信息写入到文本文件中
        logger.addHandler(fh)

        # 格式器
        # 可以预定义多种，看你自己需要，fmatter1、fmatter1
        fmt = '%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s'
        fomatter = logging.Formatter(fmt)
        fmt1 = '%(asctime)s - %(filename)s - %(levelname)s: %(message)s'
        fomatter1 = logging.Formatter(fmt1)

        # 给控制套设置格式
        sh.setFormatter(fomatter)
        # 给日志文件设置格式
        fh.setFormatter(fomatter1)
    return logger
